perm filename DOC[G,BGB] blob sn#051795 filedate 1973-07-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00018 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	TITLE PAGE - GEOMED MANUAL.
C00005 00003	INTRODUCTION.
C00007 00004	PRIMER:	INSTANT CUBE, TRANSLATION.
C00011 00005	PRIMER:	CONTROL, META, AND META-CONTROL.
C00014 00006	PRIMER:	ROTATION.
C00016 00007	PRIMER:	DRAWING A CUBE.
C00020 00008	PRIMER:	DRAWING A TORUS.
C00021 00009	COMMANDS:  "V" MKV-BODY,"E"-ESWEEP,"J"-JOIN,"G"-GLUE.
C00024 00010	COMMANDS:  "K" KILL. "S" SWEEP. "R" ROTCOM. "M" MIDPOINT.
C00027 00011	COMMANDS:  Euclidean transformations.
C00029 00012	COMMANDS:  Euclidean Transformations.
C00031 00013	COMMANDS:  Strength of Transformation.
C00033 00014	COMMANDS:  Setting the Strengths of Transformation.
C00035 00015	COMMANDS:  SWITCHES.
C00037 00016	COMMANDS:  STACK & LINK FOLLOWING.
C00038 00017	SUMMARY:  OF COMMANDS.
C00064 00018	SUMMARY:  OF COMMANDS (CONTINUED).
C00066 ENDMK
C⊗;
TITLE PAGE - GEOMED MANUAL.

SAILON NUMBER 68.			                GEOMED MANUAL


STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                  MAY 1973
OPERATING NOTE NUMBER 68.


draft - draft - draft - draft - draft - draft - draft - draft - draft
                   GEOMED  -  GEOMETRIC EDITOR.


                          Bruce g. Baumgart


ABSTRACT: 

	This note explains the keyboard  commands  of  GEOMED,  a  3D
drawing  program.  Using  GEOMED  arbitrary  polyhedron models can be
contructed and viewed in perspective with hidden lines eliminated.

CONTENTS:

	I.  PRIMER.
	II. COMMANDS.
		A. TOPOLOGY COMMANDS.
		B. GEOMETRY COMMANDS.
		C. NODE STRUCTURE COMMANDS.
		D. CONTROL AND I/O COMMANDS.
	III. NODES.
	IV. SUMMARYS.
INTRODUCTION.

	This SAILON explains the  keyboard commands of GEOMED,   a 3D
drawing  program.  Using GEOMED, arbitrary  polyhedron models  can be
contructed and viewed  in perspective  with hidden lines  eliminated.
The internal polyhedron  representation is explained in  AIM-179,  "A
Winged  Edge Polyhedron  Representation". The  internal primitives of
GEOMED will  be  documented in  a  forthcoming AIM  titled "Geometric
Modeling".

	I would like to  warn the novice that GEOMED  (on an absolute
scale)  is not  really  a very  good program  and  is far  from being
finished.  There are two causes for disappointment:  first, geometric
drawing requires careful  prior thought - for some  reason people who
do  not expect  a  text editor  to generate  a poem  or a  program by
merely "interactive"  keyboard pounding;  seem to  think that  GEOMED
should make what they want  to see without them having to think about
it.  The second cause of  disappointment is that the program has  not
been made very  fool proof; so  that blunders (or  novel applications
of the commands) tend to be fatal.
PRIMER:	INSTANT CUBE, TRANSLATION.

	This section  is  literally  an  operating  manual;  you  are
supposed  to  be  operating  GEOMED as you read. I will tell you what
keys to type and you will type them to see for yourself what happens;
although  an  explaination  is  given  later  for  each  command, the
complexity of individual commandS  tends  to  obscure  their  use  in
sequences.

	The  system  copy  of  GEOMED is started by typing "R GEOMED"
carriage return at a III  display  console.  GEOMED  will  display  a
window  frame  and  type  an  asterisk  and  await  single  character
commands.   Typing carriage returns will yield more asterisks showing
that GEOMED is alive and listening.

INSTANT CUBE.

	Type the character "∞" to get a drawing of a cube.
	Adjust the pots on the III so that the cube looks right.

TRANSLATION.

	Type the character ":" to move the cube right (positive x axis).
	Type the character ";" to move the cube left (negative x axis).
	Type the character ")" to move the cube up (positive y axis).
	Type the character "(" to move the cube down (negtive y axis).
	Type the character "*" to move the cube nearer (positive z axis).
	Type the character "-" to move the cube away (negative z axis).

	Clearly these command characters are not mnemonics, they were chosen
	because they do not require the TOP key and are conviently grouped
	in pairs under one's right hand.

STRENGTH OF TRANSLATION.

	The distance the cube is moved by a  translation  command  is
called  the  strength  of  translation  or TDEL. The value of TDEL is
displayed in the upper right corner of the screen  and  is  initially
one foot. The strength of translation is halved by typing the command
character "/" or doubled by typing "\".

WORLD FRAME OF REFERENCE.

	The  direction  the  cube moved was with respect to the world
frame of reference which is a right  handed  coordinate  system,  the
initial  camera  is  positioned  looking down the Z axis at the world
origin. The world origin will be in the center of the display  screen
a  simulated sixteen feet away; and the positive world X axis will be
to your right; and the positive world Y axis will be  up;  until  you
move the camera.
PRIMER:	CONTROL, META, AND META-CONTROL.

	Notice that the Stanford A.I. keyboard has four "shift"  keys
labeled  SHIFT, TOP, META & CONTROL. SHIFT only determines whether an
alphabetic letters is upper or lower case; GEOMED converts lower case
letters into upper so that the SHIFT key has no effect on GEOMED. The
TOP key allows two ASCII character codes to be on each physical  key,
this  doubling  up  on  the  physical keys is not important to GEOMED
since "TOP-E" can always be referred to as "@".   Finally,  of  great
importance, the CONTROL and META keys add two extra bits to the 7-bit
ASCII code, so that a 9-bit character is  sent  to  GEOMED.  In  this
manual  the  characters  "α",  "β"  and  "ε"  will  be used as prefix
abbreviations  for  CONTROL,  META  and  META-CONTROL  keying  of   a
character.  For  example,  the  "W"-command  has four  variations  as
follows:

			W	"W"	make a world.
		CONTROL-W	"αW"	make a window.
		   META-W	"βW"	make a camera.
	   META-CONTROL-W	"εW"	make an image.

	Furthermore,   the   GEOMED   command   scanner  accepts  the
characters "α", "β" and "ε" as prefix modifiers  that  will  add  the
appropriate control and meta bits to the next character. The question
mark character, explained immediately below, is the only other prefix
modifier character.

QUESTION MARK "?".

	Typing  the  question  mark  charcter  "?"  followed  by  any
character  will type a one line reminder of what commands are invoked
by that character.
PRIMER:	ROTATION.

ROTATION.

	The  rotation  command  characters  are  the  same   as   for
translation  except  you must hold the CONTROL key down or prefix the
command with an "α". Try rotating the instant cube about  the  X-axis
with  "α:".  The positive direction of rotation is counter-clockwise.
The negative direction of rotation is clockwise.

STRENGTH OF ROTATION.

	The  strength of rotation is named RDEL, the value of RDEL is
displayed in three formats in the upper  right  hand  corner  of  the
screen:  as  a  pi  fraction;  in  degrees,  minutes, seconds; and in
radians. The initial value of RDEL is π/4, 45 degrees, 0.785 radians.
Analogous  to  translation,  the  strenght  of  rotation is halved or
doubled by "α/" and "α\" respectively.

ROTATION DEFAULT.

	Since a sequence of rotations is quite common, there is a way
to make the CTRL key be sticky. The  usual  euclidean  transformation
default  is translation world frame; but after typing the "@" command
character, the euclidean default is rotation world frame. Translation
default  is  restored  by  typing  "!".  The  state  of the euclidean
transformation default is displayed in the GEOMED status.
PRIMER:	DRAWING A CUBE.

	Starting  with  a  fresh  copy  of  GEOMED,  type the command
letters in the second column to get the advertised results:

1.	V	Vertex body creation.
2.	:)	Position the vertex into the first quadrant.
3.	S;;	Make an edge and vertex and move left.
4.	S((	Edge vertex down.
5.	S::	Edge vertex right.
6.	J↑	Join the first and last vertices of the wire.
7.	*	Push the face lamina away from you.
8.	S	Sweep the square face into a very thin solid.
9.	--↑	Move the new face towards you giving the cube
		its appropriate depth.
10.	@/):!	Rotate the cube to a more familiar position.

	This example illustrates four commands that haven't been
mentioned yet:

	"V"	Vertex Body Creation.
	"S"	Sweep.
	"J"	Join two old vertices with a new edge.
	"↑"	Pop the stack.

These commands take their arguments from and leave their results in a
push down stack of bodies, faces, edges and vertices. The contents of
the stack is displayed on the left hand side of the III screen.

	The  "V"  command  takes  no  arguments and pushs a brand new
body,  face  and  vertex  into  the  stack.  This  degenerate   point
polyhedron  satisfies  the  Euler  equation  F-E+V=2, 1-0+1=2, and is
always placed at the world origin.

	The first three sweep commands in the example, sweep a vertex
polyhedron  into  a  wire polyhedron by adding a new vertex and a new
edge; incidentally preserving  Euler's  equation  as  do  all  GEOMED
commands. The wire-sweep takes a Vertex argument, and returns the new
vertex. The new vertex has the same locus as the argument vertex.

	After three sides of a  square  have  been  formed,  the  "J"
command  creates a new face and a new edge between the first and last
vertex of the wire face. The wire-join case of the "J" command  takes
a  vertex  argument  and identifies it as the end of a wire and knows
enough to fetch the other end of that wire, as its second argument.
PRIMER:	DRAWING A TORUS.

1.	V:@		First Vertex.
2.	E*E*E*		Seven more vertices.
	E*E*E*E*
3.	J↑		Form Lamina.
4.	!//:		Position the lamina.
5.	@S)S)S)S)	Sweep the face around the Y-axis.
	S)S)S)S)
6.	↓>G↑		Glue the ends of the torus together.



EXERCISES.

	1. DRAW THE SOMA CUBES AS IN FIGURE.
	2. DRAW A JACK AS IN FIGURE.
COMMANDS:  "V" MKV-BODY,"E"-ESWEEP,"J"-JOIN,"G"-GLUE.

V - VERTEX BODY CREATION.

	This command creates a polyhedron consisting  of  one  vertex
and  one  face.  The  vertex  is  placed  at the world origin.
The V command takes no arguments and leaves  the  new  body,
face and vertex on the stack with the vertex on top.


E - EDGE AND VERTEX CREATION.

	This command creates a new edge and  a  new  vertex  starting
from  an  old  vertex.  The E command requires two arguments, the top
argument is the old vertex and the second argument must be one of the
faces  to  which  the vertex belongs.  The new edge and vertex become
associated with the given face.


J - JOIN OLD VERTICES  -  FACE AND EDGE CREATION.

	This  command  creates  a  new  face  and  a new edge.  The J
command has two forms.  The general form of the J command expects two
vertices  of  the same face to be given on the top of the pdl, and it
returns in their place a new edge and a new face  with  the  edge  on
top.
	The wire form of the J command applies only to  a  face  that
doesn't  have  a  closed perimeter.
The wire J
command returns the other end of the  wire  in  top  and  leaves  the
second argument unchanged.


G - GLUE TWO FACES TOGETHER.

	This  command  takes  two  faces from the top of the pdl. The
faces must be nearly coincidant and of opposite orientation. The  two
faces  are  deleted  along  with all the edges and vertices of one of
them.  If there were two bodies, then one remains. A  body  glued  to
itself  forms  a  hole.
COMMANDS:  "K" KILL. "S" SWEEP. "R" ROTCOM. "M" MIDPOINT.

K - KILL.

	This  command  takes  the  top body, face, edge or vertex and
deletes it in a reasonible manner.


S - SWEEP.

	This  command  sweeps  a  face into either a sheet or a solid
depending on the NCNT. If the NCNT is zero, then SWEEP returns a  new
face  coincident with the given face and connected to it by new sweep
edges and rectangular sweep faces forming a prism.  Furthermore, a  β
sweep  forms a pyramid on the given face and returns the peak vertex,
while α sweep and ε sweep form antiprisms. An antiprism is  merely  a
prism with the rectangular sweep faces split into triangles.
	When the NCNT is non-zero, only the first NCNT edges  of  the
argument  face's  perimeter are swept into new faces.   Thus NCNT new
faces are created and the argument face  is  returned  somewhat  more
complicated  than  before. See the SPHERE example to clarify sweeping
out a solid of rotation.


R - Rotational Solid Completion.

	After  a  wire  has  been  swept  around, you have a shell of
rotation.  To change a shell into a solid all that remains to be done
is  do  a series of J commands on the leading and lagging vertices of
the shell. The R command, using the NCNT  to  step  around  the  pole
caps, calls the J-command for all the necessary pairs. The sweep face
is taken as an argument and nothing is returned.


M - MIDPOINT.

	This  command  takes an edge argument and creating a new edge
and a new vertex makes the appropriate modifications to the body  and
returns a the midpoint vertex of the given edge.
COMMANDS:  Euclidean transformations.

The  Euclidean  geometric  transformations are translation, rotation,
dilation and reflection; these  transformations  do  not  affect  the
topology of faces, edges and vertices. The Top of the scratch pad pdl
is transformed by hitting one of the  following  Euclidean  transform
characters:

  :	Transform in the positive direction wrt the X-axis.	
  ;	Transform in the negative direction wrt the X-axis.
  )	Transform in the positive direction wrt the Y-axis.
  (	Transform in the negative direction wrt the Y-axis.
  *	Transform in the positive direction wrt the Z-axis.
  -	Transform in the negative direction wrt the Z-axis.

Clearly these characters are not mnemonics, they were chosen  because
they do not require the TOP key and are conveniently grouped in pairs
under one's right hand.

The Transform is selected by keying the control bits or or  prefixing
the  command  with a control key character of suffering a preselected
default Transform:

		default  -  usually TRANSLATION.
α      		ROTATION.
β		DILATION.
ε	 	REFLECTION.


The Euclidean Transformation default selection characters are:

!		TRANSLATION.
@		ROTATION.
=		DILATION.
∃		REFLECTION.
COMMANDS:  Euclidean Transformations.

	Translation  moves  the Top object in the direction specified
by one unit of translation strength.  Similairly Rotation rotates the
Top object about the axis specified by one unit of rotational strength.
Positive Rotations are ccw and negative rotations are cw.

	Dilations refer to a  three  state  dilation  axis  selector.
Dilation  state  1  causes  dilation  on the specified axis, dilation
state 2 causes dilation on the two axes not indicated,  and  dilation
state  3  causes  dilation  on  all the axis indicated.  The dilation
selector is advanced by typing the letter A, Advance  Axis  Selector.
The  state of the dilation axis selector is displayed as a digit 1, 2
or 3 just to the right of the dilation strength's per  cent  sign  in
the editor status display at the upper right of the III screen.

	And  finally,  Reflections act only on the axis specified and
always in the world frae of reference.  I have found little  use  for
reflections and consquently their power has atrophied.
COMMANDS:  Strength of Transformation.

The strength of a Euclidean Transformation can be halved or
doubled by keying the Transform's control bits and by striking
a left or right square bracket respectively.

	/	Halve a Transformation Strength.
	\	Double a Transformation Strength.

The strength of a Euclidean Transformation can be set by keying the
Transform's control bits and by striking a digit from 0 to 9.

For Translation:
	0	1/16 of a foot,  A "binary inch".
	4	One Foot.
	9	32 Feet.
	N	Where 0 ≤ N ≤ 9 yield 2.0↑(N-4) feet,
		but you only need to memorize the 0,4,9 in
		order to keep your head straight.
For Rotation:
	9	π/2
	8	π/4
	   etc
For Dilation:
	0	100%
	1	10%
	2	20%
	   etc
	9	90%
COMMANDS:  Setting the Strengths of Transformation.

	The strengths of the Euclidean Transformations can be entered
numerically by typing λ,π or % followed by a numerical argument.   In
command formats given below x & y are scanned as real numbers,  while
n,  m,  d & s are scanned as integers. Integers can be typed in place
of reals with no ill affect, whereas reals  typed  for  integers  are
Fixed.

For Translation:
	λx	feet.		Initially set to 1 foot.
	λx'	feet.
	λx'y"	feet and inches.
	λy"	inches.
For Rotation:
	π/m	pi fraction.	Initially set to π/4.
	πn/m	pi fraction.
	πx	radians.
	πd,m,s	degrees, minutes, seconds of arc.
For Dilation:
	%x	0.01 ≤ x ≤ 100.00.  Divisions by zero are shunned.
		Initial set to 75%

COMMANDS:  SWITCHES.

switch		commentary


Q - FRMORG
	FRMORG affects world frame rotations.
	TRUE *		rotation about a world axis,
			thru the world origin.
	FALSE		rotation about a parallel to a world axis,
			thru the body origin.
	FRMORG is flipped by the Q-command.
	The state of FRMORG is indicated by an asterisked in the
	Editor's Status Display.  The asterisk is present when
	FRMORG is true and absent when FRMORG is false.

F - FRAME
	FRAME is a three state switch that affects translation,
	rotation and dilation.
	state-1	indicates World Frame of Reference.
	state-2	indicates Body  Frame of Reference.
	state-3	indicates Relative Frame of Reference.
	FRAME is incremented, modulo 3, by the F-command.

A - AXECNT
	AXECNT affects  only dilations.
	state-1 indicates dilation only on the specified axis.
	state-2 indicates dilation on the two axes not specified.
	state-3 indicates dilation on all three axes.
	The state of dilation is indicated by a digit to the right of
	the dilation strength's percent sign in the GEOMED Status Display.
	AXECNT is incremented, modulo 3, by the A-command.

COMMANDS:  STACK & LINK FOLLOWING.

	 ↑	POP STACK.
	α↑	ROTATE STACK UP.
	 ↓	COPY PUSH STACK DOWN.
	α↓	ROTATE STACK DOWN.

	 ↔	SWAP 1ST AND 2ND ELEMENTS OF THE STACK.
	α↔	SWAP 1ST AND 3ND ELEMENTS OF THE STACK.
	β↔	SWAP 1ST AND LAST ELEMENTS OF THE STACK.
	ε↔	SWAP 2ND AND 3RD ELEMENTS OF THE STACK.

LINK FOLLOWING COMMANDS.

	⊗	FETCH THE UNIVERSE NODE.

	< >	FACE RING.
	≤ ≥	EDGE RING.
	∨ ∧	VERTEX RING.
	
	,	FETCH CLOCKWISE.
	.	FETCH COUNTER CLOCKWISE.
	+	FETCH OTHER LINK.

	∩	FETCH DAD LINK.
	∪	FETCH SON LINK.
	⊂	FETCH BRO LINK.
	⊃	FETCH SIS LINK.

	←	FETCH ALT LINK.
	→	FETCH ALT2 LINK.
SUMMARY:  OF COMMANDS.

α CONTROL KEY PREFIX.
β META KEY PREFIX.
ε META-CONTROL PREFIX.

:  EUCLIDEAN TRANSFORMATION +X.		/ HALVE STRENGTH.
;  EUCLIDEAN TRANSFORMATION -X.		\ DOUBLE STRENGTH.
)  EUCLIDEAN TRANSFORMATION +Y.		! SET TRANSLATION DEFAULT.
(  EUCLIDEAN TRANSFORMATION -Y.		@ SET ROTATION DEFAULT.
*  EUCLIDEAN TRANSFORMATION +Z.
-  EUCLIDEAN TRANSFORMATION -Z.

π  ACCEPT ROTATION DELTA.
λ  ACCEPT TRANSLATION DELTA.
%  ACCEPT DILATION DELTA STRENGTH.

∂  FLIP NODE DISPLAY SWITCH.
∀  DISABLE BODY OPERATIONS SWITCH.
_  STICKY DISPLAY MODE SWITCH.

↓  COPY PUSH.	 α↓ ROTATE PUSH.
↑  PADPDL POP	 α↑ ROTATE POP.
↔  SWAP STACK (1ST ↔ 2ND)(1ST α↔ 3RD)(1ST β↔ LAST)(2ND ε↔ 3RD)

<  FETCH NFACE LINK.		∩  FETCH DAD LINK,
>  FETCH PFACE LINK.		∪  FETCH SON LINK,
≥  FETCH PED LINK.		⊂  FETCH BRO LINK.
≤  FETCH NED LINK.		⊃  FETCH SIS LINK.
∧  FETCH PVT LINK
∨  FETCH NVT LINK.
,  CLOCKWISE LINK.
.  COUNTER CLOCKWISE LINK.
⊗  FETCH UNIVERSE NODE.
←  FETCH ALT LINK.
→  FETCH ALT2 LINK.
+  OTHER LINK.
SUMMARY:  OF COMMANDS (CONTINUED).

α∩ BODY INTERSECTION.
α∪ BODY UNION.
α¬ BODY SUBTRACTION.

¬  BODY EVERT.
$  MAKE CONVEX.
|  INVERT EDGE PARITY.

0-9  SET-DIGIT COMMAND.
?  INFORMATION PREFIX.
#  TWENTY CRLF'S.
∞  INSTANT CUBE. α∞ INSTANT TORUS.
A  ATTACH, αARROWHEAD, βAXECNT.
B  BODY RETRIEVAL.
C  COPY. αCAMERA.
D  DETACH, αDARKEN, βDUAL, εUNDARKEN.
E  SWEEP WIRE. εEXIT.
F  FRAME STEP SWITCH.
G  GLUE COMMAND.
H  HELP
I  INPUT B3D. αI INPUT CAMERA. βI INPUT CRE.
J  JOIN VERTEX-VERTEX.
K  KILL COMMANDS.
L  LABEL LIGHTS SWITCH.
M  MIDPOINT COMMAND.
N  NAME BODY
O  OUTPUT COMMANDS.
P  OUTPUT PLOT FILE
Q  FRAME ORIGIN SWITCH.
R  ROTATION COMPLETION.
S  SWEEP COMMANDS.
T  TEXT NODE EDITOR.
V  MAKE VERTEX BODY.
W  MAKE: W WORLD. αW WINDOW. βW CAMERA. εW IMAGE.
X  EXIT GEOMED.
ALT  OCCULT. αALT FRONT FACE. βALT ALL EDGES.